package com.gsbelarus.gedemin.lib.sync.protocol.interfaces;

import com.gsbelarus.gedemin.lib.sync.protocol.SyncProtocol;

/**
 * Интерфейс для протокола синхронизации
 */
public interface SyncProtocolModel {

    /**
     * Выполняется во время подготовки к созданию нового потока загрузки, имеет доступ к UI потоку
     */
    public void onPreExecute();

    /**
     * Выполняется после загрузки, имеет доступ к UI потоку
     * внутри следует обрабатывать ошибки
     *
     * @param status статус с каким завершилась синхронизация
     *               (ID_FAILED, NO_INTERNET_CONNECTION, AUTH_FAILED, ADDRESS_FAILED, TIMEOUT, NOT_REQUIRED,
     *               GUID_FAILED, PARS_FAILED, ALSE_FAILED, SUCCESSFUL, SUCCESSFUL_DEMO, STOP_SYNC)
     */
    public void onPostExecute(SyncProtocol.SyncStatus status);

    /**
     * Обновление состояния загрузки
     *
     * @param percent      процент загрузки
     * @param currentBlock загружаемый блок
     * @param totalBlocks  общее количество блоков
     */
    public void onProgressUpdate(int percent, int currentBlock, int totalBlocks);

    /**
     * Получение url для запроса блока
     *
     * @param ver номер запрашиваемого блока
     * @return строка url
     */
    public String getUrlStringForVer(int ver);

    /**
     * Получение url для запроса максимальной версии
     *
     * @return строка url
     */
    public String getUrlStringForMaxVer();
}
